import request from "@/utils/request";

/**
 * 游戏用户记录查询参数
 */
export interface GameUserRecordQuery {
  /** 页码 */
  pageNum?: number;
  /** 每页条数 */
  pageSize?: number;
  /** 用户ID */
  userId?: number;
  /** 游戏ID */
  gameId?: number;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
}

/**
 * 游戏用户记录
 */
export interface GameUserRecord {
  /** 记录ID */
  id: number;
  /** 用户ID */
  userId: number;
  /** 游戏ID */
  gameId: number;
  /** 游戏名称 */
  gameName: string;
  /** 游戏类型 */
  gameType: string;
  /** 游戏封面 */
  gameCover?: string;
  /** 游戏时长（秒） */
  playTime: number;
  /** 最近游玩时间 */
  lastPlayed: string;
  /** 游戏进度(0-100) */
  progress: number;
  /** 用户评分(1-5) */
  rating?: number;
  /** 是否收藏 */
  favorite: boolean;
  /** 首次游玩时间 */
  firstPlayed?: string;
}

/**
 * 游戏用户记录表单
 */
export interface GameUserRecordForm {
  /** 用户ID */
  userId?: number;
  /** 游戏ID */
  gameId: number;
  /** 游戏时长（秒） */
  playTime?: number;
  /** 游戏进度(0-100) */
  progress?: number;
  /** 用户评分(1-5) */
  rating?: number;
  /** 是否收藏 */
  favorite?: boolean;
}

/**
 * 分页查询用户游戏记录
 * 
 * @param params 查询参数
 * @returns 用户游戏记录列表
 */
export function getUserGameRecords(params: GameUserRecordQuery) {
  return request({
    url: '/api/v1/game/records/page',
    method: 'get',
    params
  });
}

/**
 * 获取游戏记录详情
 * 
 * @param id 记录ID
 * @returns 游戏记录详情
 */
export function getUserGameRecord(id: number) {
  return request<any, GameUserRecord>({
    url: `/api/v1/game/records/${id}`,
    method: 'get'
  });
}

/**
 * 更新游戏记录
 * 
 * @param id 记录ID
 * @param data 表单数据
 * @returns 是否成功
 */
export function updateUserGameRecord(id: number, data: GameUserRecordForm) {
  return request<any, boolean>({
    url: `/api/v1/game/records/${id}`,
    method: 'put',
    data
  });
}

/**
 * 添加或更新游戏记录
 * 
 * @param data 表单数据
 * @returns 记录ID
 */
export function saveUserGameRecord(data: GameUserRecordForm) {
  return request<any, number>({
    url: '/api/v1/game/records',
    method: 'post',
    data
  });
}

/**
 * 获取游戏类型分布
 * 
 * @param userId 用户ID（可选）
 * @returns 类型分布数据
 */
export function getGameTypeDistribution(userId?: number) {
  return request<any, Array<{ type: string, count: number, percentage: number }>>({
    url: '/api/v1/game/records/type-distribution',
    method: 'get',
    params: userId ? { userId } : undefined
  });
}

/**
 * 获取游戏进度列表
 * 
 * @param userId 用户ID（可选）
 * @param limit 限制数量
 * @returns 游戏进度列表
 */
export function getGameProgressList(userId?: number, limit: number = 5) {
  return request<any, Array<{ gameId: number, gameName: string, progress: number }>>({
    url: '/api/v1/game/records/progress-list',
    method: 'get',
    params: {
      limit,
      userId: userId ?? undefined
    }
  });
}

/**
 * 增加游戏时长
 * 
 * @param id 记录ID
 * @param increment 增加的时长(秒)
 * @returns 是否成功
 */
export function incrementPlayTime(id: number, increment: number) {
  return request<any, boolean>({
    url: `/api/v1/game/records/${id}/play-time`,
    method: 'post',
    params: { increment }
  });
} 